iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
0
自我挑戰組

計算機概論X30天系列 第 29

Day29:[計算機概論]10010和搜尋引擎的關係——怎麼在0.0幾秒找到你要的東西?

  • 分享至 

  • xImage
  •  

閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?

▌挑戰簡介

  • 題目:計算機概論X30天

  • 挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。

  • 本篇性質:適合任何對程式語言有興趣的人閱讀

▌前情提要

在電腦的世界中,只有10101001,也就是true/false

而在之前的篇章中,我記錄了1001010這些鬼東西,是如何實現加法減法和乘法的。最後,就演變成現在如此複雜的計算機系統。

說實在,在一開始,也沒有人知道布林代數可以這樣用。又有誰會知道,這麼無聊的真假值運算,可以這樣改變世界?

直到1983年,香濃(Shaonnon)在他的碩士論文中,才指出布林代數可以用來做開關電路,因而開啟了布林代數改變世界的時代(香濃真的大天才)

▌搜尋引擎如何幫你找東西?

回到搜尋引擎,搜尋引擎是如何幫你找東西的?

一般來說,當你在goolge引擎上搜尋任何關鍵字,在0.0幾秒,就可以得到結果。

這很厲害吧?但仔細想想,如果是在Enter關鍵字後,google才幫你掃描上億篇文章,這真的有可能在0.0幾秒就辦到呢?

因此「並不是打完文字才掃描文章」,而是google早就掃描好,並且在文章上貼上「索引(index)」了。

比如說:

在搜尋引擎中搜索「狗狗」這個關鍵詞,在按下的那一刻,搜尋引擎只是就把具有「狗狗」這個索引的文章調出來。

假設N篇文章,搜尋引擎就會把有「狗狗」關鍵字就被標記為1,沒有就被標記為0

A:1001001101.....(以這串數字中為例,第一篇、第四篇文章表示有狗狗,第二、三篇表示沒有狗狗)

當伺服器收到使用者的要求後,資料庫只要把有「1」的文章調出來就可以了。

▌可是我的條件很多,很難搞

但如果要搜索的條件很多怎麼辦?

比如說,我想要搜尋「狗狗,但不是黃金獵犬」

難道Google會無聊到幫我在文章上標記「狗狗,但不是黃金獵犬」這個標籤嗎?

當然不會。誰這麼閒啊?

如果真的這樣做,使用者亂搜,那標籤不就用不完了(像是可能有人會搜「牛奶,但不是猴子」這種莫名其妙的的東西)

那怎麼辦呢?

很簡單,搜尋引擎會把它換成「狗狗&~黃金獵犬」然後進行布林運算。

比如說:

A:1001001101.....(N篇文章,只要有「狗狗」關鍵字就被標記為1,沒有就被標記為0)
B:1010000110.....(N篇文章,只要有「黃金獵犬」關鍵字就被標記為1,沒有就被標記為0)

那我們只要進行A&~B的邏輯計算,再把為1的文章調出來就可以了!

因此,A&~B的結果就變成如下:

C:0001001001.....(N篇文章,只要有「狗狗&~黃金獵犬」關鍵字就被標記為1,沒有就被標記為0)

只要把是1的文章調出來,就會是「狗狗,但不是黃金獵犬」的結果了。

▌搜尋引擎怎麼在0.0幾秒找到你要的東西?

可是瑞凡,這樣資料還是很多啊?

搜尋引擎怎麼在0.0幾秒就找到我要的東西的?

這都歸功於——電腦做布林運算非常快,一個週期可以進行32位運算,一秒數十億次。

因此,只要一開始對文章標好索引

之後再對不同關鍵字進行邏輯運算就很快了

▌心得

  • 香濃真的很天才,他怎麼可以想到把101001這種東西用來做數學運算?
  • 布林代數將世界變的量化、離散,讓機械可以方便操作,這個思維上的轉變真的讓世界變得很不一樣。

▌參考資料

吳軍・《數學之美》


上一篇
Day28:JSON vs XML
下一篇
Day30:鐵人賽——30天可以給自己多大轉變?
系列文
計算機概論X30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言